package com.acoffee.maven.controller;

import com.acoffee.maven.pojo.User;
import com.acoffee.maven.service.UserService;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.apache.ibatis.annotations.Result;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @author acoffee
 * @create 2021-05-11 20:41
 */
@Controller
public class LoginController {
    private Logger logger = Logger.getLogger(this.getClass());

    @Autowired
    private UserService userService;
    /*
    @RequestMapping中的常用属性
    value:实际上就是请求路径
    method：表示限定的请求的方式：常用的 RequestMethod.POST、 RequestMethod.GET等
    从spring4.3以后通过如下注解代替了请求方式：
    @GetMapping(value="/login")等价于 @RequestMapping(value = "/login",method = RequestMethod.GET)
    @POSTMapping(value="/login")等价于 @RequestMapping(value = "/login",method = RequestMethod.POST)
    */
    @RequestMapping(value = "/login",method = RequestMethod.POST)
    /**
     * SpringMVC接收客户端的请求参数的方式
     * 1.使用原始servlet的写法
     * 缺点：（1）不能使用spring框架提供的内置类型转换器，还需要手动转换
     *      （2）与servlet的耦合性比较强
     * 2.通过控制器处理方法的形参和表单对应的值对应的方式获取
     * 好处：相对于第一种可以不用处理类型转换
     * 缺点：如果表单的name和处理器的形参名称不对应就接收不到
     * 如果两者不对应，在springmvc提供了一个注解@RequestParam可以设置
     */
    public ModelAndView login(@RequestParam("telephone") String telephone,
                              @RequestParam("password") String password,
                              HttpSession session,
                              HttpServletRequest request){
        User result = userService.login(telephone, password);
        ModelAndView modelAndView = new ModelAndView();
        //保存到session中
        session.setAttribute("USER_SESSION",result);
        //如果是转发
//        modelAndView.setViewName("/index.jsp");
        //如果是重定向
        String contextPath = request.getContextPath();
        modelAndView.setViewName("redirect:index.jsp");
        return modelAndView;
    }
}
